<?php 

namespace Common\Model;
use Think\Model;

/**
 * 操作数据库的基类 
 */
class CommonModel extends Model
{
	/**
	 * 获取单条数据
	 */
	public function getData($map)
	{
		return $this->where($map)->find();
	}
	/**
	 * 添加数据
	 * @DateTime  2017-07-07T16:04:07+0800
	 * @param     array  $data 数组
	 */
	public function addData($data)
	{
		// 去值首尾的空格
		foreach ($data as $k => $v) {
			$data[$k] = trim($v);
		}
		$id = $this->add($data);
		return $id;
	}

	/**
	 * 修改数据
	 * @param     array  $map  条件数组
	 * @param     array  $data 更新的数据
	 * @return    boolean      更新后的返回值
	 */
	public function editData($map, $data)
	{
		// 去值首尾的空格
		foreach ($data as $k => $v) {
			$data[$k] = trim($v);
		}
		return $this->where($map)->save($data);
	}

	/**
	 * 删除数据
	 * @param     array  $map 条件数组
	 * @return    boolean     删除后的返回值
	 */
	public function deleteData($map)
	{
		if (empty($map)) {
			return ;
		}
		return $this->where($map)->delete();
	}

	/**
	 * 数据排序
	 * @param     array    $data  数据源
	 * @param     string   $id    主键名
	 * @param     string   $order 排序字段
	 * @return    boolean         更新后的结果
	 */
	public function orderData($data, $id="id", $order="order_number")
	{
		foreach ($data as $k => $v) {
			$v = empty($v) ? null : $v;
			$this->where([
					$id => $k
				])->save([
					$order => $v
				]);
		}
		// 这里的操作不是完美级别的
		// 在更新多个字段的时候，其中出现错误的判断没有
		return true;
	}

	/**
	 * 获取全部数据
	 */
	public function getTreeData($type="tree", $order="", $name="name", $child="id", $parent="pid")
	{
		// 判断是否需要排序
		if (empty($order)) {
			$data = $this->select();
		} else {
			$data = $this->order($order. " is null,".$order)->select();
		}
		// 获取树形获取结构数据
		if ($type == "tree") {
			$data = \Org\Nx\Data::tree($data, $name, $child, $parent);
		} elseif($type == "level"){
			 $data=\Org\Nx\Data::channelLevel($data,0,'&nbsp;',$child);
		}
		return $data;
	}

	/**
	 * 获取分页数据
	 * @AuthorHTL
	 * @DateTime  2017-07-13T12:02:18+0800
	 * @param     [obj]      $model 模型对象
	 * @param     [array]    $map   查询条件
	 * @param     string                   $order [description]
	 * @param     integer                  $limit [description]
	 * @param     string                   $field [description]
	 * @return    [type]                          [description]
	 */
	public function getPage($model, $map, $order="", $limit=10, $field="*")
	{
		// 计算总条数
		if (empty($map)) {
			$count = $model
				
				->count();
		} else {

			$count = $model
				->where($map)
				->count();
		}
		$page = new_page($count, $limit);
		//获取分页数据
		if (empty($map)) {
			$list = $model
                ->field($field)
				->order($order)
				->limit($page->firstRow.','.$page->listRows)
				->select();
		} else {
            $list=$model
                ->field($field)
                ->where($map)
                ->order($order)
                ->limit($page->firstRow.','.$page->listRows)
                ->select();         
        }
		// dump($model->_sql(), $order);
		// die;
        $data=array(
            'data'=>$list,
            'page'=>$page->show()
            );
        return $data;
	}

	/**
	 * [getPage 获取分页]
	 * @AuthorHTL
	 * @DateTime  2017-03-24T19:53:15+0800
	 * @param     obj     $mod   model对象
	 * @param     array     $map   where条件
	 * @param     array      $join  join条件
	 * @param     string     $field 字段条件
	 * @param     string     $order  排序条件
	 * @param     integer    $limit  条数
	 * @return    array       数据和分页条组成的数组
	 */
	static public function getJoinPage($mod,$map,$join=array(),$field='',$group='',$order='',$limit=5){
		//获取数据总条数
			$row = $mod->where($map)->join($join)->group($group)->select();
			$num = count($row);

			// dump($row);
		// var_dump($row);
		// die;
		$page = new_page($num,$limit);
		
		$page->setConfig('prev',"上一页");
        $page->setConfig('next',"下一页");
        $page->setConfig('first',"首页");
        $page->setConfig('last',"尾页");

		if(empty($field)){
			$list = $mod->where($map)->join($join)->group($group)->limit($page->firstRow,$page->listRows)->select();
		}else{
			$list = $mod->field($field)->where($map)->join($join)->group($group)->limit($page->firstRow,$page->listRows)->select();
		}
		// echo $mod->_sql();
		// die;
		
		$data = array(
					'data' => $list,
					'page' => $page->show()
				);
		return $data;

	}

	
}